package cn.edu.neu.lab603.cloudeval.entity

import cn.edu.neu.lab603.cloudeval.CloudEval
import cn.edu.neu.lab603.cloudeval.entity.CloudTask.SubmissionEvent

import scala.collection.mutable

/** 云计算的一个用户。
  *
  * Created by yfwz100 on 16/9/14.
  */
class User(protected val context: CloudEval,
           protected val cloudlets: mutable.ArrayBuffer[CloudTask]) {

  /** 创建一个用户 */
  def this(context: CloudEval) = this(context, new mutable.ArrayBuffer[CloudTask])

  def this(context: CloudEval, cloudlets: Iterable[CloudTask]) = this(context, cloudlets.to[mutable.ArrayBuffer])

  // 设置云计算任务的所属用户
  for (cloudlet <- cloudlets) {
    cloudlet.setUser(this)
  }

  /** 该用户下属的云计算任务需求。
    *
    * @return 任务需求列表。
    */
  def getCloudlets: Seq[CloudTask] = cloudlets

  /** 添加计算任务到该用户管理下。
    *
    * @param cl cloudlet 的列表
    */
  def addCloudlets(cl: List[CloudTask]): Unit = cloudlets ++= cl

  /** 提交云计算任务。 */
  protected[cloudeval] def submitCloudlets(): Unit = {
    cloudlets.foreach(c => context.submitTask(c.start, SubmissionEvent(c)))
  }

}